package com.yq.homework.day21;



import java.util.Arrays;



/**
 * @author 3307235355@qq.com
 * @since 2022/06/22 15:42
 * 编写一个Cat类
 * 成员变量：
 * int age，String name，double price

 * 按以下要求进行自然排序：
 * 1，直接实现Comparable接口，按照年龄的从小到大对Cat数组进行自然排序
 * 2，利用Comparator接口，用 匿名内部类和lambda分别对Cat数组进行自然排序
 *
 * 1，按照price的大到小排序
 * 2，name的长短排序，name越长对象越大
 * 3，综合age，name，price进行排序，要求用lambda表达式指向一个方法。
 * 排序的规则是age越小对象越小，age相同比较name长短，name越短对象越小，name长度也相等，比较price，price越大对象越小
 */
public class Demo04 {
    public static void main(String[] args) {
        Cat c1 = new Cat(10, "小花花", 85.6);
        Cat c2 = new Cat(6, "小小", 70);
        Cat c3 = new Cat(6, "红红红红", 100.5);
        Cat c4 = new Cat(6, "明明", 65.5);
        Cat c5 = new Cat(6, "明明", 75.5);
        Cat[] cats = new Cat[]{c1,c2,c3,c4,c5};
        System.out.println("排序前：");
        System.out.println(Arrays.toString(cats));

        //1，直接实现Comparable接口，按照年龄的从小到大对Cat数组进行自然排序
        // Arrays.sort(cats);


        // 2，利用Comparator接口，用 匿名内部类和lambda分别对Cat数组进行自然排序
        // Arrays.sort(cats, new Comparator<Cat>() {
        //     @Override
        //     public int compare(Cat o1, Cat o2) {
        //         return o1.getAge()-o2.getAge();
        //     }
        // });

        // 1，按照price的大到小排序
        // Arrays.sort(cats,(cat1,cat2)->Double.compare(cat2.getPrice(),cat1.getPrice()));



        // * 2，name的长短排序，name越长对象越大
        // Arrays.sort(cats,(cat1,cat2)->cat1.getName().length()-cat2.getName().length());


        /*
        3，综合age，name，price进行排序，要求用lambda表达式指向一个方法。
            排序的规则是age越小对象越小，age相同比较name长短，name越短对象越小，name长度也相等，比较price，price越大对象越小
         */
        Arrays.sort(cats,Demo04::test);


        System.out.println("排序后：");
        System.out.println(Arrays.toString(cats));

    }
    private static int test(Cat cat1,Cat cat2){
        if (cat1.getAge()==cat2.getAge()){
            if (cat1.getName().length()==cat2.getName().length()){
                return Double.compare(cat2.getPrice(),cat1.getPrice());
            }
            return cat1.getName().length()-cat2.getName().length();
        }
        return cat1.getAge()-cat2.getAge();
    }
}
class Cat implements Comparable<Cat>{
    private int age;
    private String name;
    private double price;

    public Cat(int age, String name, double price) {
        this.age = age;
        this.name = name;
        this.price = price;
    }

    @Override
    public int compareTo(Cat o) {
        return this.age-o.age;
    }

    @Override
    public String toString() {
        return "Cat{" +
                "age=" + age +
                ", name='" + name + '\'' +
                ", price=" + price +
                '}'+"\n";
    }

    public int getAge() {
        return age;
    }

    public String getName() {
        return name;
    }

    public double getPrice() {
        return price;
    }
}
